package writtenTraining.day11;

import java.util.*;

/**
 * day11:(1)模拟+枚举：游游的水果大礼包
 */



 class Main1 {
    public static void main(String[] args) {
//         模拟 + 分类讨论

        // 输入
        Scanner in = new Scanner(System.in);
        long a = in.nextLong(), b = in.nextLong(),
                oneGift = in.nextLong(), twoGift = in.nextLong();

//         准备工作
//         ta 和 tb 表示临时操作的数据
//         count1 和 count2 表示各种礼物的数量
        long ta = a, tb = b, count1 = 0, count2 = 0;
//         优先挑选的总和
        long  oneSum = 0L, twoSum = 0L, ret = 0L;


        // 情况一： 先挑选二号奖品
//         二号物品的个数
        count2 = Math.min(ta,tb/2);

        while(count2 > 0 ) {
            ta = a;
            tb = b;
            //         剩余的各自数量
            ta -= count2;
            tb -= (count2 * 2);

            //         最后挑选一号物品的数量
            count1 = Math.min(ta/2,tb);

            //         记录优先二号奖品的总价值
            twoSum = (count1 * oneGift)  + (count2 * twoGift);

            ret= Math.max(twoSum, ret);
            count2--;
        }


//         情况二： 先挑选一号物品
        count1 = Math.min(a/2,b);

        while(count1 > 0 ) {
            ta = a;
            tb = b;
            //         剩余数量
            ta -= (count1 * 2);
            tb -= count1;

//         最后挑选二号物品的数量
            count2 = Math.min(ta,tb/2);
//         记录优先一号奖品的总价值
            oneSum = (count1 * oneGift) + (count2 * twoGift);

            ret = Math.max(oneSum, ret);
            count1--;
        }



//         输出结果
        System.out.println(ret);
    }
}


/**
 * day11:(2)贪心：DP31 买卖股票的最好时机(二)
 */

public class Main {
    public static void main(String[] args) {
        // 贪心 + 最长递增序列

        // 输入
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] nums = new int[n];
        int prev = in.nextInt();
        long ret = 0;
        for(int i = 1; i < n; i++) {
            int num = in.nextInt();
            // 拆分成与一段一段的递增区间
            ret += (num - prev > 0 ? num - prev : 0);

            // 更新前面那个数
            prev = num;
        }


        // 返回值
        System.out.println(ret);
    }
}

/**
 * day11:(3)模拟+栈：OR62 倒置字符串
 */

 class Main3 {
    public static void main(String[] args) {
        // 栈的先入后出

        // 输入
        Scanner in = new Scanner(System.in);
        char[] str = (in.nextLine() + " ").toCharArray();
        int len = str.length;
        StringBuilder ret = new StringBuilder();

        // 使用栈存储
        Stack<StringBuilder> stack = new Stack<>();
        for(int i = 0; i < len; i++) { 
            if(str[i] == ' ') {
                // 一遇到空格就加入队列
                stack.push(ret);
                // 然后重新实例化一个对象
                ret = new StringBuilder();
            } else {
                // 加入到 ret 中
                ret.append(str[i]);
            }
        }

        // 输出结果
        int sz = stack.size();
        for(int i = 0; i < sz - 1; i++) {
            System.out.print(stack.pop().toString() + " ");
        }
        System.out.println(stack.pop().toString());


    }
}